/**
 * StringUtil.java
 * cn.vko.oa.utils
 * Copyright (c) 2014, 北京微课创景教育科技有限公司版权所有.
*/
package com.education.util;

import java.lang.reflect.Array;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 常用的工具类的集合
 * <p>
 * @author   zhangshijie
 * @Date	 Aug 28, 2014 10:29:21 AM
 */
public class DataUtil {

	/**
	 * 判断一个对象是否为空。它支持如下对象类型：
	 * <ul>
	 * <li>null : 一定为空
	 * <li>字符串     : ""为空,多个空格也为空
	 * <li>数组
	 * <li>集合
	 * <li>Map
	 * <li>其他对象 : 一定不为空
	 * </ul>
	 * 
	 * @param obj
	 *            任意对象
	 * @return 是否为空
	 */
	public final static boolean isEmpty(final Object obj) {
		if (obj == null) {
			return true;
		}
		if (obj instanceof String) {
			return "".equals(String.valueOf(obj).trim());
		}
		if (obj.getClass().isArray()) {
			return Array.getLength(obj) == 0;
		}
		if (obj instanceof Collection<?>) {
			return ((Collection<?>) obj).isEmpty();
		}
		if (obj instanceof Map<?, ?>) {
			return ((Map<?, ?>) obj).isEmpty();
		}
		return false;
	}

	public final static boolean isNotEmpty(final Object obj) {
		return !isEmpty(obj);
	}

	/**为空值（str）替换默认值（defaultValue）*/
	public static String checkString(Object str, String defaultValue) {
		if (isEmpty(str)) {
			return defaultValue;
		}
		return str.toString();
	}

	public static int checkInt(String str, int defaultValue) {
		if (str == null || "".equals(str.trim())) {
			return defaultValue;
		}
		return Integer.parseInt(str);
	}

	/** 生成一位随机字符 */
	public static String getRandomChar() {
		int rand = (int) Math.round(Math.random() * 2);
		long itmp = 0;
		char ctmp = '\u0000';
		switch (rand) {
		case 1:// 大写字母
			itmp = Math.round(Math.random() * 25 + 65);
			ctmp = (char) itmp;
			return String.valueOf(ctmp);
		case 2:// 小写字母
			itmp = Math.round(Math.random() * 25 + 97);
			ctmp = (char) itmp;
			return String.valueOf(ctmp);
		default:// 数字
			itmp = Math.round(Math.random() * 9);
			return String.valueOf(itmp);
		}
	}

	/**转换文件大小（单位）*/
	public static String formatFileSize(long size) {
		DecimalFormat df = new DecimalFormat("#.00");
		String sizeStr = "";
		if (size < 1024) {
			sizeStr = df.format((double) size) + "B";
		} else if (size < 1048576) {
			sizeStr = df.format((double) size / 1024) + "KB";
		} else if (size < 1073741824) {
			sizeStr = df.format((double) size / 1048576) + "MB";
		} else {
			sizeStr = df.format((double) size / 1073741824) + "GB";
		}
		return sizeStr;
	}

	/**
	 * 验证是否为邮箱
	 * @param str
	 * @return
	 */
	public static boolean isEmail(String str) {
		if(isEmpty(str)) {
			return false;
		}
		Pattern pattern = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
		Matcher matcher = pattern.matcher(str);
		return matcher.matches();
	}

	public static void main(String[] args) {
		System.out.println(checkString(444, ""));

	}

}
